<?php

require_once("/var/www/AppResiduos2/config/BaseDatosPDO.php");
require_once("/var/www/AppResiduos2/lib/dao/ResiduoDAO.php");
require_once("/var/www/AppResiduos2/lib/dao/EmpresaDAO.php");
require_once("/var/www/AppResiduos2/lib/model/TransportadorResiduo.php");

class TransportadorResiduoDAO{

        var $conexion;

        public function  __construct() {
            try{
                $bd = new BaseDatosPDO("localhost", "phplogin", "root", "root");
                $this->conexion = $bd->conectar();
            } catch (PDOException $e){
                echo $e->getMessage();
            }
            $this->conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
            $this->conexion->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
        }

         /**
         * Crea un nuevo registro en la tabla transporters_residues de la bd
         * @param TransportadorResiduo $tr
         */
        public function nuevoTranspResiduo($tr){
            $query = $this->conexion->prepare("INSERT INTO transporters_residues VALUES (?,?,?,?)");
            $params = array($tr->idTransp, $tr->idproducer, $tr->idResidue, $tr->quantity);
            $result = $query->execute($params);
        }

        /**
         * Modifica un registro de la tabla transporters_residues de la bd
         * @param TransportadorResiduo $tr
         */
        public function modificarTranspResiduo($tr){
            $query = $this->conexion->prepare('UPDATE transporters_residues SET
                quantity = quantity + ? WHERE idTransp = ? and idproducer = ? and idResidue = ?');
            $params = array($tr->quantity, $tr->idTransp, $tr->idproducer, $tr->idResidue);
            $result = $query->execute($params);
        }

        /**
         * Elimina un registro de la tabla transporters_residues de la bd
         * @param TransportadorResiduo $tr
         */
        public function eliminarTranspResiduo($tr){
            $query = $this->conexion->prepare('DELETE FROM transporters_residues
                WHERE idTransp = ? and idproducer = ? and idResidue = ?');
            $result = $query->execute(array($tr->idTransp, $tr->idproducer, $tr->idResidue));
        }

        /**
         * Retorna un registro de la tabla transporters_residues con
         * el fin de conocer la cantidad de residuo (quantity)
         * idResidue transportado por el transportador identificado como
         * idTransp
         * @param int $idTransp
         * @param int $idproducer
         * @param String $idResidue
         * @return TransportadorResiduo
         */
        public function listarTranspYResiduo($idTransp, $idproducer, $idResidue){
            $query = $this->conexion->prepare('SELECT * FROM transporters_residues
                WHERE idTransp = ? and idproducer = ? and idResidue = ?');
            $query->execute(array($idTransp, $idproducer, $idResidue));
            $result = $query->fetchAll(PDO::FETCH_OBJ);
            return $result;
        }

        /**
         * Retorna un array con los nombres de los residuos y los productores,
         * para los cuales el transportador tiene el identificador
         * idTransp (Necesario para listar estas tuplas en el campo
         * Residuos Transportados en ListarTransportadores)
         * @param int $idTransp
         * @return TransportadorResiduo
         */
        public function listarResiduoProdTransp($idTransp){
            $query = $this->conexion->prepare('SELECT * FROM transporters_residues
                WHERE idTransp = ?');
            $query->execute(array($idTransp));
            $result = $query->fetchAll(PDO::FETCH_OBJ);

            $rDAO = new ResiduoDAO();
            $pDAO = new EmpresaDAO();
            $i = 0;
            $resultArray = array();
            while ($i < sizeof($result)){
                $nombreResiduo = $rDAO->obtenerResiduo($result[$i]->idresidue, $result[$i]->idproducer);
                $nombreResiduo = $nombreResiduo[0]->name;
                $nombreEmpresa = $pDAO->obtenerEmpresa($result[$i]->idproducer);
                $nombreEmpresa = $nombreEmpresa[0]->name;
                $resultArray[$i] = $nombreResiduo. " : ". $nombreEmpresa;
                $i = $i + 1;
            }
            return $resultArray;
        }

      
        public function listarCantTransp($idTransp){
            $query = $this->conexion->prepare('SELECT SUM(quantity) FROM transporters_residues
                GROUP BY idproducer, idResidue');
            $query->execute();
            $result = $query->fetchAll(PDO::FETCH_COLUMN);

//            $i = 0;
//            $resultArray = array();
//            while ($i < sizeof($result)){
//                $resultArray[$i] = $result[$i]->quantity;
//                $i = $i + 1;
//            }
            return $result;
        }

        public function listarCantRestante($idTransp){
            $query = $this->conexion->prepare('SELECT * FROM transporters_residues
                WHERE idTransp = ?');
            $query->execute(array($idTransp));
            $result = $query->fetchAll(PDO::FETCH_OBJ);

            $rDAO = new ResiduoDAO();
            $i = 0;
            $resultArray = array();
            while ($i < sizeof($result)){

                $result2 = $rDAO->obtenerResiduo($result[$i]->idresidue, $result[$i]->idproducer);
                $resultArray[$i] = $result2[0]->quantity - $result[$i]->quantity;
                $i = $i + 1;
            }
            
            return $resultArray;
        }

        /**
         * Retorna la cantidad restante de residuo, dado el id del residuo
         * y el id del productor. Necesario en ListarResiduos
         * @param String $idresidue
         * @param int $idproducer
         * @return float
         */
        public function listarCantRestante2($idresidue, $idproducer){
            $query = $this->conexion->prepare('SELECT SUM(quantity) FROM transporters_residues
                WHERE idResidue = ? and idproducer = ?');
            $query->execute(array($idresidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_COLUMN);
            
            $rDAO = new ResiduoDAO();
            
            $result2 = $rDAO->obtenerResiduo($idresidue, $idproducer);
            $resultCant = $result2[0]->quantity - $result[0];
            

            return $resultCant;
        }

        /**
         * Retorna la cantidad transportada de residuo, dado el id del residuo
         * y el id del productor. Necesario en ListarResiduos
         * @param String $idresidue
         * @param int $idproducer
         * @return float
         */
        public function listarCantTransp2($idresidue, $idproducer){
            $query = $this->conexion->prepare('SELECT SUM(quantity) FROM transporters_residues
                WHERE idResidue = ? and idproducer = ?');
            $query->execute(array($idresidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_COLUMN);
            return $result[0];
            
        }

        public function listarCantidades($idresidue, $idproducer){
            $query = $this->conexion->prepare('SELECT * FROM transporters_residues
                WHERE idResidue = ? and idproducer = ?');
            $query->execute(array($idresidue, $idproducer));
            $result = $query->fetchAll(PDO::FETCH_OBJ);
            return $result;

        }
}

// Prueba1: Agregar registro a tabla transporters_residues
//$tr = new TransportadorResiduo();
//$tr->idTransp = 11;
//$tr->idproducer = 5;
//$tr->idResidue = "R1";
//$tr->quantity = 20;
//$tr2 = new TransportadorResiduo();
//$tr2->idTransp = 11;
//$tr2->idproducer = 5;
//$tr2->idResidue = "R2";
//$tr2->quantity = 15;
//$tr3 = new TransportadorResiduo();
//$tr3->idTransp = 10;
//$tr3->idproducer = 6;
//$tr3->idResidue = "R2";
//$tr3->quantity = 15.1;
//$trDAO = new TransportadorResiduoDAO();
//$trDAO->nuevoTranspResiduo($tr);
//$trDAO->nuevoTranspResiduo($tr2);
//$trDAO->nuevoTranspResiduo($tr3);

// Prueba para modificar cantidad de residuo
//$tr3 = new TransportadorResiduo();
//$tr3->idTransp = 10;
//$tr3->idproducer = 6;
//$tr3->idResidue = "R2";
//$tr3->quantity = 0.9;
//$trDAO = new TransportadorResiduoDAO();
//$trDAO->modificarTranspResiduo($tr3);

// Prueba2: eliminar registro de table transporters_residues
//$tr = new TransportadorResiduo();
//$tr->idTransp = 11;
//$tr->idproducer = 5;
//$tr->idResidue = "R1";
//$trDAO = new TransportadorResiduoDAO();
//$trDAO->eliminarTranspResiduo($tr);

// Prueba3: listar los residuos que transporte un transportador (en realidad los registros completos)
//$trDAO = new TransportadorResiduoDAO();
//print_r($trDAO->listarCantTransp(10));

// Prueba4: listar la cantidad de residuo que dado el id del transportador
//$trDAO = new TransportadorResiduoDAO();
//print_r($trDAO->listarCantRestante(11));

// Prueba5: listar la cantidad de residuo que dado el id del residuo y del productor
//$trDAO = new TransportadorResiduoDAO();
//print_r($trDAO->listarCantRestante2("R2", 5));

//Prueba6: Listar las cantidades y transportadores para un id de residuo y un
// id de productor dado
//$trDAO = new TransportadorResiduoDAO();
//print_r($trDAO->listarCantidades("R2", 5));

?>
